package com.tingyun.sign.utils;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Random;
import java.util.regex.Pattern;

import org.apache.commons.lang.StringUtils;

public class DateUtils {

	private static String pattenStr = "^(http|www|ftp|)?(://)?(\\w+(-\\w+)*)(\\.(\\w+(-\\w+)*))*((:\\d+)?)(/(\\w+(-\\w+)*))*(\\.?(\\w)*)(\\?)?(((\\w*%)*(\\w*\\?)*(\\w*:)*(\\w*\\+)*(\\w*\\.)*(\\w*&)*(\\w*-)*(\\w*=)*(\\w*%)*(\\w*\\?)*(\\w*:)*(\\w*\\+)*(\\w*\\.)*(\\w*&)*(\\w*-)*(\\w*=)*)*(\\w*)*)$";

	/**
	 * 验证url字符串是否正确
	 * 
	 * @param url
	 * @return
	 */
	public static Boolean isStrMatchesUrl(String url) {

		if (StringUtils.isNotBlank(url)) {
			return Pattern.matches(pattenStr, url);
		}
		return false;
	}

	public static String converToStringDate(Date date, String formatString) {
		if (StringUtils.isEmpty(formatString)) {
			SimpleDateFormat sdf_datetime_s = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
			return sdf_datetime_s.format(date);
		} else {
			SimpleDateFormat format = new SimpleDateFormat(formatString);
			return format.format(date);
		}
	}

	/**
	 * @see 将字符串转化为JAVA时间类型(精确到秒)。
	 * 
	 * @author chenshoujiang
	 * @return Date date。JAVA时间类型。
	 * @param String
	 *            。字符串。
	 */
	public static Date converToDateTime(String dateStr) {
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		try {
			return sdf.parse(dateStr);
		} catch (Exception e) {
			return null;
		}
	}

	/**
	 * @see 得到传入日期n天后的日期,如果传入日期为null，则表示当前日期n天后的日期
	 * 
	 * @author chensj
	 * @param Date
	 *            dt
	 * @param days
	 *            可以为任何整数，负数表示前days天，正数表示后days天
	 * @return Date
	 */
	public static Date getAddDayTime(Date dt, int days) {
		if (dt == null)
			dt = new Date(System.currentTimeMillis());
		Calendar cal = Calendar.getInstance();
		cal.setTime(dt);
		cal.set(Calendar.DAY_OF_MONTH, cal.get(Calendar.DAY_OF_MONTH) + days);
		return cal.getTime();
	}

	/**
	 * @see 将日期转化为字符串(精确到秒)。
	 * 
	 * @author chenshoujiang
	 * @return Date date。JAVA时间类型。
	 * @param String
	 *            。字符串。
	 */
	public static String converToStringTime(Date date) {
		SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		try {
			return format.format(date);
		} catch (Exception e) {
			return null;
		}
	}

	public static Date converToDate(String dateStr) {
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
		try {
			return sdf.parse(dateStr);
		} catch (Exception e) {
			return null;
		}
	}
	
	public static Date converToDate(String dateStr,String dateFormate) {
		SimpleDateFormat sdf = new SimpleDateFormat(dateFormate);
		try {
			return sdf.parse(dateStr);
		} catch (Exception e) {
			return null;
		}
	}

	public static String converToStringDate(Date date) {
		SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
		try {
			return format.format(date);
		} catch (Exception e) {
			return null;
		}
	}

	/**
	 * 将时间移动days天
	 * 
	 * @param date
	 *            当前日期
	 * @param days
	 *            移动的天数
	 * @return 移动后的时间
	 */
	public static Date addDay(Date date, Integer days) {
		Calendar c = Calendar.getInstance();
		c.setTime(date);
		c.add(Calendar.DAY_OF_YEAR, days);
		return c.getTime();
	}

	public static String randomString(int length) {
		String str = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
		Random random = new Random();
		StringBuffer buf = new StringBuffer();

		for (int i = 0; i < length; i++) {
			int num = random.nextInt(62);
			buf.append(str.charAt(num));
		}
		return buf.toString();
	}
}
